package cn.xopencode.oss.rpc.permission;

import cn.xopencode.common.framework.vo.CommonResult;
import cn.xopencode.oss.rpc.permission.dto.PermissionAssignEmployeePositionDTO;
import cn.xopencode.oss.rpc.permission.dto.PermissionAssignPositionResourceDTO;
import cn.xopencode.oss.rpc.permission.dto.PermissionCheckDTO;
import java.util.Set;
/**
 * 权限资源 Rpc 接口
 */
public interface PermissionRpc {

    /**
     * 获得职务拥有的资源编号Set
     *
     * @param positionId 职务编号
     * @return 资源编号列表
     */
    CommonResult<Set<String>> listPositionResourceIds(String positionId);

    /**
     * 授予职务资源
     *
     * @param assignRoleResourceDTO 赋予职务资源 DTO
     * @return 成功
     */
    CommonResult<Boolean> assignPositionResource(PermissionAssignPositionResourceDTO assignRoleResourceDTO);

    /**
     * 授予员工职位
     * @param assignEmployeePositionDTODTO
     * @return
     */
    CommonResult<Boolean> assignEmployeeRole(PermissionAssignEmployeePositionDTO assignEmployeePositionDTODTO);

    /**
     * 校验职位是否拥有指定权限。
     *
     * 如果没有，则抛出 {@link cn.xopencode.common.framework.exception.ServiceException} 异常
     *
     * @param checkDTO 校验权限 DTO
     * @return 成功
     */
    CommonResult<Boolean> checkPermission(PermissionCheckDTO checkDTO);

    /**
     * 根据userID从Redis缓存中加载用户权限校验的结果缓存
     * @param userID
     * @return
     */
    PermissionCheckDTO get(String userID);

    /**
     *设置PermissionCheckDTO缓存
     * @param permissionCheckDO
     */
    void set(PermissionCheckDTO permissionCheckDO);

}
